﻿using System;
using System.Collections.Generic;
using Belmost4PDA.DatabaseWorkPDA;

namespace Belmost4PDA.Fasade
{
    public class LogRecord
    {
        public enum LogType
        {
            Insert,
            Update,
            Delete,
            BrDefUpdate,
            BrElmInser,
            BrElmDelete
        }
        // -- поля для мапинга в базу
        public LogType logType;
        public string sqlText;
        public int idBr;
        public string tableName;
        public string tableDescr;
        public string runDate;
        public List<LogRecordDetail> detailRecords = new List<LogRecordDetail>();
        // ---
        /// <summary>
        /// Сохраняет данные в базу. 
        /// </summary>
        public void Save()
        {
            // получить новый ID 
            string ID = GenNewID();
            // вставить запись в BrLog
            // вставить дочерние записи
            QueryExec q =new QueryExec();
            string InsertNew = "Insert into Brlog (idlog, logtype, sqltext, idbr, tablename, tabledescr, rundate) values({0}, '{1}', '{2}', {3}, '{4}', '{5}', '{6}')";
            sqlText=sqlText.Replace("'", "");
            InsertNew = String.Format(InsertNew, ID, logType.ToString(), sqlText, idBr, tableName, tableDescr, runDate);
            q.Execute(InsertNew);
            foreach (LogRecordDetail record in detailRecords)
            {
                record.Save(ID);
            }
            
        }
        /// <summary>
        /// Получить новый идентификатор для записей лога
        /// </summary>
        /// <returns></returns>
        private string GenNewID()
        {
            string GetOldId = "select max(idlog) as idlog from BrLog";
            QuerySelect q = new QuerySelect();
            q.Select(GetOldId);
            List<DataRows.DataRows> lst = q.GetRows();
            int NewId = int.Parse(lst[0].FieldByNameDef("idlog","0")) + 1;
            return NewId.ToString();
        }

        /// <summary>
        /// Устанавливает runDate в текущую дату
        /// </summary>
        public void SetCurrRunDate()
        {
            runDate = DateTime.Now.ToString();
        }

        /// <summary>
        /// Устанавливает описание по таблице
        /// </summary>
        public void SetTableDescr()
        {
            if(ControlsReader.TableNameToDescription.ContainsKey(tableName.ToUpper()))
            {
                tableDescr = ControlsReader.TableNameToDescription[tableName.ToUpper()];
            }
            else
            {
                tableDescr = "";
            }

        }
    }
}
